package thread;
/**
 * 静态方法上如果使用synchronized，那么该方法一定具有同步效果
 * */
public class SyncDemo3 {
    public static void main(String[] args) {

        //方式一：只能在静态情况下执行：排队执行
        Thread t1 = new Thread(Boo::doSome);
        Thread t2 = new Thread(Boo::doSome);

        //方式二：
        /*静态情况：下是排队执行
        *非静态情况：下是并发执行
        * */
//        Boo b1 = new Boo();
//        Boo b2 = new Boo();
//        Thread t1 = new Thread(()->b1.doSome());
//        Thread t2 = new Thread(()->b2.doSome());

        t1.start();
        t2.start();
    }
}


class Boo{
    /**
     *  静态方法上使用synchronized时，同步监视器为当前类的类对象，即:Class的实例
     *  反射知识点会介绍类对象。
     */
//    public synchronized static void doSome(){
    public  static void doSome() {
        //如果在静态方法中使用同步块，那么同步监视器对象应当还是选取类对象
        //类对象的获取方法：类名.class
        synchronized (Boo.class) {
            Thread t = Thread.currentThread();
            System.out.println(t.getName() + "正在执行doSome方法....");
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }
            System.out.println(t.getName() + "执行doSome方法结束....");
        }
    }
}